﻿Imports TepcelDominio
Imports TepcelBL

Public Class frmProducto
    Dim err As New System.Windows.Forms.ErrorProvider
    Dim listaProducto As New List(Of Producto)
    Dim CategoriaBL As New CategoriaBL
    Dim ProveedorBL As New ProveedorBL
    Dim ProductoBL As New ProductoBL
    Private Sub frmProducto_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Call CargarGrid()
        txtBuscar.Focus()
    End Sub

    Private Sub clearError()
        err.SetError(CBEProveedor, "")
        err.SetError(CBECategoria, "")
        err.SetError(txtNombreProducto, "")
        err.SetError(txtDescripcionProducto, "")
    End Sub

    Private Sub CargarGrid()
        DGVLista.Rows.Clear()
        listaProducto = ProductoBL.GetAllFromProducto
        If listaProducto.Count = 0 Then
            btnModificar.Enabled = False
            btnEliminar.Enabled = False
        End If
        Dim i As Integer
        For i = 0 To listaProducto.Count - 1
            With listaProducto.Item(i)
                DGVLista.Rows.Add(i, .codigoProducto, .nombreProducto, .Categoria.nombreCategoria, .Proveedor.nombreProveedor)
            End With
        Next
    End Sub

    Private Sub nuevo()
        btnModificar.Enabled = False
        btnEliminar.Enabled = False
        btnCancelar.Enabled = True
        btnGuardar.Enabled = True
        btnNuevo.Enabled = False

        CBEProveedor.Enabled = True
        CBECategoria.Enabled = True
        txtNombreProducto.Enabled = True
        txtDescripcionProducto.Enabled = True

        DGVLista.Enabled = False

        'cargar categorias
        Call CargarListaCategorias()
        Call CargarListaProveedor()

        CBEProveedor.Focus()
    End Sub

    Private Sub CargarListaCategorias()
        Dim listaCategoria As New List(Of Categoria)

        listaCategoria = CategoriaBL.GetAllFromCategoria


        CBECategoria.DataSource = Nothing
        CBECategoria.DataSource = listaCategoria
        CBECategoria.DisplayMember = "nombreCategoria"
        CBECategoria.ValueMember = "codigoCategoria"

    End Sub

    Private Sub CargarListaProveedor()
        Dim listaProveedor As New List(Of Proveedor)

        listaProveedor = ProveedorBL.GetAllFromProveedor

        CBEProveedor.DataSource = Nothing
        CBEProveedor.DataSource = listaProveedor
        CBEProveedor.DisplayMember = "nombreProveedor"
        CBEProveedor.ValueMember = "codigoProveedor"

    End Sub

    Private Sub cancelar()
        btnModificar.Enabled = True
        btnEliminar.Enabled = True
        btnCancelar.Enabled = False
        btnGuardar.Enabled = False
        btnNuevo.Enabled = True

        CBEProveedor.Enabled = False
        CBECategoria.Enabled = False
        txtNombreProducto.Enabled = False
        txtDescripcionProducto.Enabled = False

        DGVLista.Enabled = True

        txtCodigoProducto.Text = ""
        CBEProveedor.Text = ""
        CBECategoria.Text = ""
        txtNombreProducto.Text = ""
        txtDescripcionProducto.Text = ""
    End Sub

    Private Sub txtBuscar_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBuscar.TextChanged
        If txtBuscar.Text.Trim.Length = 0 Then
            Call CargarGrid()
        Else
            DGVLista.Rows.Clear()
            listaProducto = ProductoBL.SearchFromProducto(txtBuscar.Text.Trim)
            Dim i As Integer
            For i = 0 To listaProducto.Count - 1
                With listaProducto.Item(i)
                    DGVLista.Rows.Add(i, .codigoProducto, .nombreProducto, .Categoria.nombreCategoria, .Proveedor.nombreProveedor)
                End With
            Next
        End If
    End Sub

    Private Sub btnModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnModificar.Click
        Call nuevo()
        Call clearError()
        Dim item As Integer = DGVLista.Item(0, DGVLista.CurrentRow.Index).Value
        With listaProducto.Item(item)
            txtCodigoProducto.Text = .codigoProducto
            CBEProveedor.SelectedValue = .Proveedor.codigoProveedor
            CBECategoria.SelectedValue = .Categoria.codigoCategoria
            txtNombreProducto.Text = .nombreProducto
            txtDescripcionProducto.Text = .descripcionProducto
        End With

        CBEProveedor.Enabled = True
        CBECategoria.Enabled = True
        txtNombreProducto.Enabled = True
        txtDescripcionProducto.Enabled = True


    End Sub

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
        If CBEProveedor.SelectedValue.Trim.Length = 0 Then
            err.SetError(CBEProveedor, "Seleccione un Proveedor")
            Return
        Else
            err.SetError(CBEProveedor, "")
        End If

        If CBECategoria.SelectedValue.Trim.Length = 0 Then
            err.SetError(CBECategoria, "Seleccione una categoría")
            Return
        Else
            err.SetError(CBECategoria, "")
        End If

        If txtNombreProducto.Text.Trim.Length = 0 Then
            err.SetError(txtNombreProducto, "LLene el nombre del producto")
            Return
        Else
            err.SetError(txtNombreProducto, "")
        End If


        If (txtCodigoProducto.Text.Trim.Length > 0) Then
            Dim prod As New TepcelDominio.Producto(txtCodigoProducto.Text, txtNombreProducto.Text.Trim, txtDescripcionProducto.Text.Trim, CBECategoria.SelectedValue.Trim, CBEProveedor.SelectedValue.Trim)
            txtCodigoProducto.Text = ProductoBL.NuevoProducto(prod)
        Else
            Dim prod As New TepcelDominio.Producto("", txtNombreProducto.Text.Trim, txtDescripcionProducto.Text.Trim, CBECategoria.SelectedValue.Trim, CBEProveedor.SelectedValue.Trim)
            txtCodigoProducto.Text = ProductoBL.NuevoProducto(prod)
        End If


        Call cancelar()


        Call CargarGrid()

    End Sub

    Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminar.Click
        Dim result As DialogResult
        result = MessageBox.Show("confirma que desea Eliminar el Registro seleccionado?", "Eliminar", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
        If result = DialogResult.OK Then
            If ProductoBL.DeleteProducto(listaProducto.Item(CInt(DGVLista.Item(0, DGVLista.CurrentRow.Index).Value)).codigoProducto) Then
                MessageBox.Show("Registro Eliminado Correctamente", "Eliminar", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Call CargarGrid()
            Else
                MessageBox.Show("No se elimino el registro seleccionado", "Eliminar", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        End If
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        Call cancelar()
        Call clearError()

        txtBuscar.Focus()

    End Sub

    Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click
        Call nuevo()
        Call clearError()
    End Sub

    Private Sub CBECategoria_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles CBECategoria.GotFocus, CBEProveedor.GotFocus
        sender.SelectionStart = 0
        sender.SelectionLength = sender.Text.Length
    End Sub

    Private Sub CBECategoria_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles CBECategoria.KeyUp, CBEProveedor.KeyUp
        Dim sTexto As String
        Dim indiceEncontrado As Integer
        Dim itemEncontrado As Object
        Dim textoItem As String
        Dim agregarTexto As String


        Select Case e.KeyCode
            Case Keys.Back, Keys.Left, Keys.Right, Keys.Up, Keys.Delete, Keys.Down, Keys.Tab
                Return
        End Select

        sTexto = sender.Text
        indiceEncontrado = sender.FindString(sTexto)

        If indiceEncontrado >= 0 Then
            itemEncontrado = sender.Items(indiceEncontrado)
            textoItem = sender.GetItemText(itemEncontrado)

            agregarTexto = textoItem.Substring(sTexto.Length)
            sender.Text = sTexto & agregarTexto

            sender.SelectionStart = sTexto.Length
            sender.SelectionLength = agregarTexto.Length

        End If

    End Sub

    
End Class